/**
 * Fichier EnsLibreTableModel.java : Définition de classe
 * fr.unice.gnpt.gui.util.EnsLibreTableModel : Affichage des services libres
 * 
 * Auteurs : Groupe GNPT : Gastinel, Nicolas, Pellegrino, Trovato
 */
package fr.unice.gnpt.gui.util;

import java.util.Collection;

import fr.unice.gnpt.core.Cours;
import fr.unice.gnpt.gui.utilisateur.Utilisateur;

/**
 * Classe définissant un TableModel pour afficher les services restant.
 * <p>
 * Il s'agit à la fois des services non validés par le coordonnateur, et des
 * services qui n'ont été choisis par personne.
 * 
 * @author gnpt
 * @version 0.0.1
 */
public class EnsLibreTableModel extends ServiceTableModel<PseudoEnseignement> {

	private final static long serialVersionUID = 1L;

	private Utilisateur frameUtilisateur;

	/**
	 * Constructeur par défaut.
	 * 
	 * @param frame
	 *            l'objet Utilisateur qui gère la JTable associé à ce modèle.
	 */
	public EnsLibreTableModel(Utilisateur frame) {
		super();
		this.nomColonnes = new String[] { "Cours", "CM libre", "TD libres",
				"TP libres" };
		this.classColonnes = new Class<?>[] { String.class, Boolean.class,
				Integer.class, Integer.class };
		this.frameUtilisateur = frame;
		this.autoRecuperationDonnees();
	}

	/**
	 * Méthode de remplissage automatique des données
	 */
	private void autoRecuperationDonnees() {
		Collection<Cours> coll = this.frameUtilisateur.getCollCours();
		for (Cours c : coll) {
			this.insererLigne(new PseudoEnseignement(c));
		}
	}

	private void insererLigne(PseudoEnseignement pe) {
		if ((pe.getGroupesTDLibres() > 0) || (pe.getGroupesTPLibres() > 0)
				|| (pe.isCmLibre()))
			super.ajouterLigne(pe);
	}

	/**
	 * On bloque cette méthode. Les données ne sont pas modifiables. Il faut
	 * plutôt utiliser la méthode {@link EnsLibreTableModel#actualiserDonnees()}
	 * à la place.
	 * 
	 * @see fr.unice.gnpt.gui.util.ServiceTableModel#ajouterLigne(java.lang.Object)
	 */
	@Override
	public void ajouterLigne(PseudoEnseignement pe) {
		throw new UnsupportedOperationException(
				"Données non modifiables directement");
	}

	/**
	 * Méthode d'actualisation des données.
	 */
	public void actualiserDonnees() {
		this.clearDonnees();
		this.autoRecuperationDonnees();
	}

	/**
	 * @see javax.swing.table.TableModel#getValueAt(int, int)
	 */
	@Override
	public Object getValueAt(int rowIndex, int columnIndex) {
		PseudoEnseignement ps = this.getDonneeAt(rowIndex);
		Object ret = null;
		if (ps != null) {
			switch (columnIndex) {
			case 0:
				ret = ps.getCours().toString();
				break;
			case 1:
				ret = ps.isCmLibre();
				break;
			case 2:
				ret = ps.getGroupesTDLibres();
				break;
			case 3:
				ret = ps.getGroupesTPLibres();
				break;
			}
		}
		return ret;
	}
}
